const { createLogger, format, transports } = require('winston');
const MySQLTransport = require('winston-mysql');
// 读取环境变量 config/config.json
// 根据环境变量 NODE_ENV 来选择数据库配置
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/../config/config.json')[env];
const options = {
  host: config.host,
  user: config.username,
  password: config.password,
  database: config.database,
  table: 'logs',
};

const logger = createLogger({
  level: 'info',
  format: format.combine(
    format.errors({ stack: true }), // 添加错误堆栈信息
    format.json()
  ),
  defaultMeta: { service: 'clwy-api' },
  transports: [new MySQLTransport(options)],
});

if (process.env.NODE_ENV !== 'production') {
  logger.add(
    new transports.Console({
      format: format.combine(format.colorize(), format.simple()),
    })
  );
}

module.exports = logger;
// const winston = require('winston');

// const logger = winston.createLogger({
//     //level 表示日志的级别，例如，info、warn、error等，默认为info，低于info的日志不会输出，
//     //可以通过设置level来调整日志的级别，例如，设置为warn，则只会输出warn、error级别的日志，不会输出info级别的日志
//     level: 'info',
//     //format 表示日志的格式，例如，json格式
//     format: winston.format.combine(
//         winston.format.errors({stack: true}), // 添加错误堆栈信息
//         winston.format.json()
//     ),
//     //defaultMeta 表示 添加一些元数据，例如服务名称，到日志中
//     defaultMeta: { service: 'user-service' },
//     // transports 表示日志的输出位置。可以添加多个，例如将日志输出到文件、数据库等位置。
//     transports: [
//         //
//         // - Write all logs with importance level of `error` or higher to `error.log`
//         //   (i.e., error, fatal, but not other levels)
//         //
//         // 将'error、或 更高级别的错误写入日志文件:'error.log
//         // (即，error、fatal，但不包括其他级别)
//         new winston.transports.File({ filename: 'error.log', level: 'error' }),
//         //
//         // - Write all logs with importance level of `info` or higher to `combined.log`
//         //   (i.e., fatal, error, warn, and info, but not trace)
//         //
//         // 将`info、或 更高级别的错误写入日志文件:
//         // combined.log
//         // (即，fatal、error、warn、info和debug，但不包括trace)
//         new winston.transports.File({ filename: 'combined.log' }),
//     ],
// });

// //
// // If we're not in production then log to the `console` with the format:
// // `${info.level}: ${info.message} JSON.stringify({ ...rest }) `
// //
// // 如果不是生产环境，则在终端中用以下格式输出，这样便于调试错误
// //$finfo.level}:$finfo.message} JSON.stringify({ ...rest })
// if (process.env.NODE_ENV !== 'production') {
//     logger.add(new winston.transports.Console({
//         // format: winston.format.simple(),
//         format: winston.format.combine(
//             winston.format.colorize(),
//             winston.format.simple()
//         )
//     }));
// }

// module.exports = logger;

// // const winston = require('winston');
// // const { combine, timestamp, printf, colorize } = winston.format;

// // // 自定义日志格式（带时间戳，更易读）
// // const customFormat = printf(({ level, message, timestamp, ...meta }) => {
// //   return `${timestamp} [${level.toUpperCase()}]: ${message} ${meta.service ? `(service: ${meta.service})` : ''}`;
// // });

// // const logger = winston.createLogger({
// //   level: 'info',
// //   format: combine(
// //     timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
// //     customFormat // 替换为自定义格式（也可保留json，但需确保写入）
// //   ),
// //   defaultMeta: { service: 'user-service' },
// //   transports: [
// //     new winston.transports.File({
// //       filename: 'error.log',
// //       level: 'error',
// //       options: { flags: 'a+' } // 追加模式，确保文件存在
// //     }),
// //     new winston.transports.File({
// //       filename: 'combined.log',
// //       options: { flags: 'a+' } // 强制追加写入
// //     }),
// //   ],
// // });

// // // 开发环境终端输出（保留颜色）
// // if (process.env.NODE_ENV !== 'production') {
// //   logger.add(new winston.transports.Console({
// //     format: combine(
// //       colorize(),
// //       timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
// //       customFormat
// //     ),
// //   }));
// // }

// // module.exports = logger;
